{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练\n",
    "*说明：总共尝试了三个模型训练数据，分别为：xgboost，GBDT，GBDT+LR。其中GBDT+LR方法由于电脑配置的限制，在使用GBDT生成的特征这一阶段，模型的复杂度设置比较低，没有完全学习出样本的信息，致使再使用LR产生的结果并不好，而选用复杂的模型设置，导致生成特征比较多，导致电脑直接死机，所以后面没再尝试，如果硬件可以，可以尝试这一方法，或者尝试GBDT+PCA+LR（这一想法没来得及尝试）。xgboost做了两次尝试都没有GBDT结果好，所以最终选择了GBDT模型训练数据，结果中最好的参数设置见GBM训练那一节。在特征方面，画出特征的重要性图，有些特征对模型的贡献虽然比较小，但是如果去掉的话会影响模型的性能。*\n",
    "\n",
    "**目录**\n",
    "1. 读取训练集和测试集\n",
    "2. 编码数据集\n",
    "3. 优化内存\n",
    "4. 展示部分测试集和训练集\n",
    "5. 模型训练\n",
    "6. 特征重要性图\n",
    "7. 结果保存"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "from sklearn import metrics\n",
    "# from sklearn.cross_validation import train_test_split\n",
    "from sklearn import preprocessing\n",
    "import pickle\n",
    "# 获取当前的工作目录\n",
    "pwd = os.getcwd()\n",
    "# 将工作目录更改到训练集\n",
    "os.chdir(\"处理后训练集\")\n",
    "# ——————————————————————————读取训练数据—————————————————————————————— #\n",
    "# 航班数据\n",
    "with open('colums_type.pickle','rb') as f:\n",
    "    colums_types = pickle.load(f)\n",
    "train_data = pd.read_table('train_data1.csv',sep=',',encoding='gb2312',dtype=colums_types)\n",
    "os.chdir(pwd)\n",
    "# 改回原来工作目录\n",
    "\n",
    "# 填充缺失值\n",
    "train_data['到达天气'] = train_data['到达天气'].astype('object')\n",
    "train_data['到达天气']=train_data['到达天气'].fillna('0')\n",
    "train_data['出发天气'] = train_data['出发天气'].astype('object')\n",
    "train_data['出发天气']=train_data['出发天气'].fillna('0')\n",
    "train_data['前序延误']=train_data['前序延误'].fillna(train_data['前序延误'].mean()) #均值填充\n",
    "train_data['出发气温'] = train_data['出发气温'].astype('object')\n",
    "train_data['出发气温']=train_data['出发气温'].fillna('一般')\n",
    "train_data['到达气温'] = train_data['到达气温'].astype('object')\n",
    "train_data['到达气温']=train_data['到达气温'].fillna('一般')\n",
    "train_data['起飞间隔'] = train_data['起飞间隔'].fillna(train_data['起飞间隔'].mean())#均值填充\n",
    "# train_data = train_data.dropna()\n",
    "# 分类变量\n",
    "targets = np.where(train_data['起飞延误时间']>3,1,0)\n",
    "\n",
    "del(train_data['起飞延误时间'])\n",
    "\n",
    "# ——————————————————————————读取测试数据—————————————————————————————— #\n",
    "# 工作目录更改到测试集以读取数据\n",
    "os.chdir(\"处理后测试集\")\n",
    "# 航班数据\n",
    "test_data = pd.read_table('test_data1.csv',sep=',',encoding='gb2312')\n",
    "# 改回工作目录\n",
    "os.chdir(pwd)\n",
    "train_columns = train_data.columns\n",
    "test_data = test_data[train_columns]\n",
    "# 填充缺失值\n",
    "test_data['到达天气'] = test_data['到达天气'].astype('object')\n",
    "test_data['到达天气']=test_data['到达天气'].fillna('0')\n",
    "test_data['出发天气'] = test_data['出发天气'].astype('object')\n",
    "test_data['出发天气']=test_data['出发天气'].fillna('0')\n",
    "test_data['前序延误']=test_data['前序延误'].fillna(test_data['前序延误'].mean()) #均值填充\n",
    "test_data['出发气温'] = test_data['出发气温'].astype('object')\n",
    "test_data['出发气温']=test_data['出发气温'].fillna('一般')\n",
    "test_data['到达气温'] = test_data['到达气温'].astype('object')\n",
    "test_data['到达气温']=test_data['到达气温'].fillna('一般')\n",
    "test_data['起飞间隔'] = test_data['起飞间隔'].fillna(train_data['起飞间隔'].mean()) #均值填充"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 编码数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 对字符型数据编码\n",
    "columns = ['出发机场', '到达机场', '出发天气', '到达天气','航班编号','出发气温','到达气温','航空公司']\n",
    "\n",
    "le = preprocessing.LabelEncoder()\n",
    "for col in columns :\n",
    "    train_data[col] = le.fit_transform(train_data[col])\n",
    "#     未见过的字符加进去\n",
    "    clas = list(le.classes_)\n",
    "    clas = clas + list(test_data[col])\n",
    "    le.classes_ = np.array(np.unique(clas))\n",
    "    \n",
    "    test_data[col] = le.transform(test_data[col])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 优化内存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# # 优化内存\n",
    "for i in train_data.columns:\n",
    "    if train_data[i].dtypes == 'int64':\n",
    "        train_data[i] = pd.to_numeric(train_data[i],errors='ignore',downcast='unsigned')\n",
    "        test_data[i] = pd.to_numeric(test_data[i],errors='ignore',downcast='unsigned')\n",
    "    elif train_data[i].dtypes == 'float64':\n",
    "        train_data[i] = pd.to_numeric(train_data[i],errors='ignore',downcast='float')\n",
    "        test_data[i] = pd.to_numeric(test_data[i],errors='ignore',downcast='float')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 展示部分测试集和训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>出发机场</th>\n",
       "      <th>到达机场</th>\n",
       "      <th>航班编号</th>\n",
       "      <th>飞机编号</th>\n",
       "      <th>计划飞行时间</th>\n",
       "      <th>计划起飞时刻</th>\n",
       "      <th>航班月份</th>\n",
       "      <th>计划到达时刻</th>\n",
       "      <th>前序延误</th>\n",
       "      <th>起飞间隔</th>\n",
       "      <th>到达特情</th>\n",
       "      <th>出发特情</th>\n",
       "      <th>出发天气</th>\n",
       "      <th>出发气温</th>\n",
       "      <th>到达天气</th>\n",
       "      <th>到达气温</th>\n",
       "      <th>航空公司</th>\n",
       "      <th>航班性质</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>160</td>\n",
       "      <td>375</td>\n",
       "      <td>25554</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.333333</td>\n",
       "      <td>23</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0.668666</td>\n",
       "      <td>4.503409</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>117</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>160</td>\n",
       "      <td>300</td>\n",
       "      <td>25554</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.166667</td>\n",
       "      <td>23</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0.668666</td>\n",
       "      <td>4.503409</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>95</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>427</td>\n",
       "      <td>165</td>\n",
       "      <td>25450</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.416667</td>\n",
       "      <td>23</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0.668666</td>\n",
       "      <td>4.503409</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>102</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>427</td>\n",
       "      <td>367</td>\n",
       "      <td>25450</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.666667</td>\n",
       "      <td>23</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>0.668666</td>\n",
       "      <td>4.503409</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>95</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>218</td>\n",
       "      <td>452</td>\n",
       "      <td>1393</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.833333</td>\n",
       "      <td>23</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0.668666</td>\n",
       "      <td>4.503409</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>97</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   出发机场  到达机场   航班编号  飞机编号    计划飞行时间  计划起飞时刻  航班月份  计划到达时刻      前序延误  \\\n",
       "0   160   375  25554   0.0  2.333333      23     7       1  0.668666   \n",
       "1   160   300  25554   0.0  6.166667      23     7       5  0.668666   \n",
       "2   427   165  25450   0.0  1.416667      23     7       0  0.668666   \n",
       "3   427   367  25450   0.0  3.666667      23     7       2  0.668666   \n",
       "4   218   452   1393   0.0  1.833333      23     7       1  0.668666   \n",
       "\n",
       "       起飞间隔  到达特情  出发特情  出发天气  出发气温  到达天气  到达气温  航空公司  航班性质  \n",
       "0  4.503409     0     0     0     0   117     0   128     1  \n",
       "1  4.503409     0     0     0     0    95     0   128     1  \n",
       "2  4.503409     0     0     0     0   102     0   128     1  \n",
       "3  4.503409     0     0     0     0    95     0   128     1  \n",
       "4  4.503409     0     0     0     0    97     0     6     1  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>出发机场</th>\n",
       "      <th>到达机场</th>\n",
       "      <th>航班编号</th>\n",
       "      <th>飞机编号</th>\n",
       "      <th>计划飞行时间</th>\n",
       "      <th>计划起飞时刻</th>\n",
       "      <th>航班月份</th>\n",
       "      <th>计划到达时刻</th>\n",
       "      <th>前序延误</th>\n",
       "      <th>起飞间隔</th>\n",
       "      <th>到达特情</th>\n",
       "      <th>出发特情</th>\n",
       "      <th>出发天气</th>\n",
       "      <th>出发气温</th>\n",
       "      <th>到达天气</th>\n",
       "      <th>到达气温</th>\n",
       "      <th>航空公司</th>\n",
       "      <th>航班性质</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>188</td>\n",
       "      <td>222</td>\n",
       "      <td>1388</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.083333</td>\n",
       "      <td>16</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>0.458432</td>\n",
       "      <td>4.511399</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>188</td>\n",
       "      <td>222</td>\n",
       "      <td>1392</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>17</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>0.458432</td>\n",
       "      <td>-0.516667</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>320</td>\n",
       "      <td>149</td>\n",
       "      <td>12602</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.250000</td>\n",
       "      <td>21</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458432</td>\n",
       "      <td>3.483333</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "      <td>59</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>320</td>\n",
       "      <td>100</td>\n",
       "      <td>3658</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.166667</td>\n",
       "      <td>22</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458432</td>\n",
       "      <td>-1.633333</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>97</td>\n",
       "      <td>0</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>136</td>\n",
       "      <td>363</td>\n",
       "      <td>10345</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.166667</td>\n",
       "      <td>22</td>\n",
       "      <td>4</td>\n",
       "      <td>23</td>\n",
       "      <td>0.458432</td>\n",
       "      <td>4.511399</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>44</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   出发机场  到达机场   航班编号  飞机编号    计划飞行时间  计划起飞时刻  航班月份  计划到达时刻      前序延误  \\\n",
       "0   188   222   1388   0.0  1.083333      16     4      17  0.458432   \n",
       "1   188   222   1392   0.0  0.833333      17     4      18  0.458432   \n",
       "2   320   149  12602   0.0  2.250000      21     4       0  0.458432   \n",
       "3   320   100   3658   0.0  2.166667      22     4       0  0.458432   \n",
       "4   136   363  10345   0.0  1.166667      22     4      23  0.458432   \n",
       "\n",
       "       起飞间隔  到达特情  出发特情  出发天气  出发气温  到达天气  到达气温  航空公司  航班性质  \n",
       "0  4.511399     0     0     0     0     0     0     6     0  \n",
       "1 -0.516667     0     0     0     0     0     0     6     0  \n",
       "2  3.483333     0     0     0     0    17     0    59     1  \n",
       "3 -1.633333     0     0     0     0    97     0    32     1  \n",
       "4  4.511399     0     0     0     0     0     0    44     1  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## GBDT训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "test = test_data.copy()\n",
    "# 设置参数\n",
    "gbdt = GradientBoostingClassifier(loss='exponential',n_estimators=300,max_depth=5,learning_rate=0.08,min_samples_leaf=500,subsample=0.8)\n",
    "# 训练\n",
    "gbdt.fit(train_data,targets)\n",
    "# 预测结\n",
    "pre_y = gbdt.predict_proba(test)[:,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 特征重要性图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2f76fd208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "features = list(train_data.columns)\n",
    "feature_important = gbdt.feature_importances_\n",
    "# feature_important = xgb.feature_importances_\n",
    "plt.figure(figsize=(12,8))\n",
    "plt.bar(np.arange(len(features)),feature_important)\n",
    "plt.xticks(np.arange(len(features)),features,fontsize=12,rotation=10)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 结果保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_data = pd.read_table('test_data1.csv',sep=',',encoding='gb2312')\n",
    "result = pd.DataFrame()\n",
    "result['Flightno'] = test_data['航班编号']\n",
    "result['FlightDepcode'] = test_data['出发机场']\n",
    "result['FlightArrcode'] = test_data['到达机场']\n",
    "result['PlannedDeptime'] = test_data['计划出发时间']\n",
    "result['PlannedArrtime'] = test_data['计划到达时间']\n",
    "result['prob'] = pre_y\n",
    "# 将结果保存到文件，# 注意这个处理完的数据集保存在了当前文件夹下-----‘结果’\n",
    "os.chdir(\"结果\")\n",
    "result.to_csv('result.csv',index=False)\n",
    "os.chdir(pwd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
